package cn.liangxxhu.idempotent.core;

import cn.liangxxhu.idempotent.annotation.Idempotent;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 幂等性执行处理器，定义幂等校验与执行流程接口。
 */
public interface IdempotentExecuteHandler {

    /**
     * 幂等性前置处理逻辑（如生成/校验 token、参数去重校验等）。
     * @param wrapper 幂等参数包装器
     */
    void handler(IdempotentParamWrapper wrapper);

    /**
     * 执行幂等性处理逻辑（AOP 环绕调用）。
     * @param point AOP 方法连接点
     * @param idempotent 幂等性注解
     */
    void execute(ProceedingJoinPoint point, Idempotent idempotent);

    /**
     * 异常流程处理（可选覆写）。
     */
    default void exceptionProcessing() {

    }

    /**
     * 后置处理（可选覆写）。
     */
    default void postProcessing() {

    }
}
